/**
 * 封装学生操作得API
 */

const fs = require('fs')
const dbPath = './data/db.json'
const loginPath = './data/login.json'
  /**
   * 获取所有学生列表,通过callback回调函数拿到所有学生列表 callback
   * callback 参数 ：学生列表（数组）
   */

exports.find = function(callback) {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    // 调用find函数想要得到其中异步操作的结果，需要借助回调函数来实现
    // callback接受两个参数，一个是错误对象，一个是学生列表
    if (err) return console.log(err);
    callback(JSON.parse(data).students)
  })
}

/**
 * 添加保存学生
 * 接收参数：newStudent:要新添加的学生对象
 */

exports.save = function(newStudent) {
  // 崔帆喜欢嘉敏
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) return callback(err)
    let studentsJson = JSON.parse(data)
    newStudent = { id: studentsJson.students.length + 1, ...newStudent }
    studentsJson.students.push(newStudent)
    fs.writeFile(dbPath, JSON.stringify(studentsJson), (err) => {
      return console.log(err);
    })
  })
}

/**
 * 获取指定学生信息（根据id），通过callback回调拿到学生对象
 * 接收参数：id, 回调函数callback(学生对象)
 */

exports.getStudentById = function(id, callback) {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) return console.log(err);
    const student = JSON.parse(data).students.find(item => parseInt(item.id) === parseInt(id))
    callback(student)
  })
}

/**
 * 更新学生信息
 * 接收参数：学生对象
 */

exports.update = function(student) {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) return console.log(err);
    let studentsJson = JSON.parse(data)
    const index = studentsJson.students.findIndex(item => parseInt(item.id) === parseInt(student.id))
    studentsJson.students[index] = student
    fs.writeFile(dbPath, JSON.stringify(studentsJson), (err) => {
      return console.log(err);
    })
  })
}

/**
 * 删除学生
 * 接收参数：学生对象
 */

exports.delete = function(student) {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) return console.log(err);
    let studentsJson = JSON.parse(data)
    const index = studentsJson.students.findIndex(item => parseInt(item.id) === parseInt(student.id))
    studentsJson.students.splice(index, 1)
    studentsJson.students.forEach((item, index) => {
      item.id = index + 1
    })
    fs.writeFile(dbPath, JSON.stringify(studentsJson), (err) => {
      return console.log(err);
    })
  })
}

exports.login = function(user, callback) {
  fs.readFile(loginPath, 'utf-8', (err, data) => {
    if (err) return console.log(err);
    let users = JSON.parse(data).users
    let tag = users.findIndex(item =>
      parseInt(item.number) === parseInt(user.number) && parseInt(item.number) === parseInt(user.number))
    callback(tag !== -1)
  })
}

exports.register = function(user, callback) {
  fs.readFile(loginPath, 'utf-8', (err, data) => {
    if (err) return console.log(err);
    let users = JSON.parse(data).users
    users.push(user)
    console.log(users);
    fs.writeFile(loginPath, JSON.stringify({ users: users }), (err) => {
      if (err) return callback(null)
      callback(true)
    })
  })
}